package br.com.affero.testewel.form;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;

import br.com.affero.testewel.model.document.DocumentUtil;

/**
 * Formulário para a inclusão/edição de documentos.
 * 
 * @author Welington Veiga
 * @since 19/12/2011
 * @version 1.0.0
 */
public class DocumentForm  extends ActionForm{
	 
		private static final long serialVersionUID = -284191588000852186L;
		
		private static final String VAL_FILE_REQUIRED = "file.err.required";
		
		private static final String VAL_FILE_UNKNOWN_EXT = "file.err.ext";
		
		private static final String VAL_FILE_MAX_SIZE = "file.err.size";
		
		private String id;
		
		private FormFile file;
	 
		private String title;
		
		private String description;
		
		
		public FormFile getFile() {
			return file;
		}
	 
		public void setFile(FormFile file) {
			this.file = file;
		}
		
		public String getTitle() {
			return title;
		}

		public void setTitle(String title) {
			this.title = title;
		}

		public String getDescription() {
			return description;
		}

		public void setDescription(String description) {
			this.description = description;
		}

		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}


		@Override
		public ActionErrors validate(ActionMapping mapping,
		   HttpServletRequest request) {
	 
		    ActionErrors errors = new ActionErrors();
		    
		    // Validando o atributo file.
		    validateFile(errors);
		    
		    // Validando o atributo título.
		    validateTitle(errors);
		    
		    // Validando o atributo descrição.
		    validateDescription(errors);
		    
		    
		    return errors;
		}

		/**
		 * Método para as validações da propriedade File.
		 * Um file deve ser:
		 * <ul>
		 *   <li>É obrigatório.</li>
		 *   <li>Deve ser de uma das extensões Permitidas.</li>
		 *   <li>Deve ser menor que fileService.getMaxSize()</li>
		 *   <li>È obrigatório</li>
		 *   
		 * </ul>
		 * 
		 * @param errors
		 */
		private void validateFile(ActionErrors errors){
			return;
			/*
			DocumentUtil fileService = DocumentUtil.getInstance();
			
			// É Obrigatório
			if(getFile().getFileSize() == 0)
				errors.add(VAL_FILE_REQUIRED, new ActionMessage(VAL_FILE_REQUIRED));
			
			// Deve ser de uma das extensões conhecidas
			if(!fileService.isExtensionAllowed(file.getContentType()))
				errors.add(VAL_FILE_UNKNOWN_EXT, new ActionMessage(VAL_FILE_UNKNOWN_EXT));
			
			// Deve ter ser menor que o máximo permitido.
			if(getFile().getFileSize() > fileService.getMaxFileSize())
				errors.add(VAL_FILE_MAX_SIZE, new ActionMessage(VAL_FILE_MAX_SIZE, getFile().getFileSize() ));
				*/
		}

		/**
		 * Método para as validações da propriedade Título.
		 * Um título deve ser:
		 * <ul>
		 *   <li>É obrigatório.</li>
		 *   <li>Deve ser menor que 100 caracteres</li>
		 * </ul>
		 * @param errors
		 */
		private void validateTitle(ActionErrors errors) {
		
		}
		
		/**
		 * Método para as validações da propriedade Descrição.
		 * Uma descrição deve ser:
		 * <ul>
		 *   <li>É obrigatória.</li>
		 *   <li>Deve ser menor que 600 caracteres</li>
		 * </ul>
		 * @param errors
		 */
		private void validateDescription(ActionErrors errors) {
			// TODO Auto-generated method stub
		}
	}

